// package com.yonghui.springsecurityoauth2demo.config;
//
// import org.apache.http.client.utils.URIBuilder;
// import org.springframework.security.oauth2.provider.endpoint.AuthorizationEndpoint;
// import org.springframework.web.bind.annotation.RequestMapping;
// import org.springframework.web.bind.annotation.RequestParam;
// import org.springframework.web.bind.support.SessionStatus;
// import org.springframework.web.servlet.ModelAndView;
//
// import java.net.URI;
// import java.net.URISyntaxException;
// import java.security.Principal;
// import java.util.Map;
//
// /**
//  * @author he_jiebing@jiuyv.com
//  * @create 2024-05-16 13:39
//  */
// public class CustomAuthorizationEndpoint extends AuthorizationEndpoint {
//     @RequestMapping(value = "/oauth/authorize")
//     public ModelAndView authorize(Map<String, Object> model,
//                                   @RequestParam Map<String, String> parameters,
//                                   SessionStatus sessionStatus,
//                                   Principal principal) {
//         // 在这里，你可以添加自定义逻辑来处理state参数或者修改重定向URI
//         //String state = parameters.get("state");
//         // 进行自定义逻辑处理
//         // 确保将state添加到模型或重定向视图中
//         ModelAndView modelAndView = super.authorize(model, parameters, sessionStatus, principal);
//         // 可以修改modelAndView来调整返回的重定向URI
//         // 检查授权是否成功，如果成功，可能会有一个重定向的操作
//         if (modelAndView != null && modelAndView.getViewName().startsWith("redirect:")) {
//             String viewName = modelAndView.getViewName();
//             String state = parameters.get("state");
//
//             // 你可以在这里添加任何额外的逻辑来决定是否要修改重定向的URL
//             // 确保包括state参数
//             URI redirectUri = null;
//             try {
//                 redirectUri = new URI(viewName.substring("redirect:".length()));
//             } catch (URISyntaxException e) {
//                 throw new RuntimeException(e);
//             }
//             URIBuilder uriBuilder = new URIBuilder(redirectUri);
//
//             // 仅当state存在时才添加到URI中
//             if (state != null && !uriBuilder.getQueryParams().stream().anyMatch(nv -> nv.getName().equals("state"))) {
//                 uriBuilder.addParameter("state", state);
//             }
//
//             // 构建最终的重定向URI
//             try {
//                 modelAndView.setViewName("redirect:" + uriBuilder.build().toString());
//             } catch (URISyntaxException e) {
//                 throw new RuntimeException(e);
//             }
//         }
//
//
//         return modelAndView;
//     }
// }
